package com.doit.day01;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Random;
import java.util.Scanner;

/**
 * 需求：使用redis模拟手机验证码发送，验证码有效期60s，验证验证码输入不能超过3次，超过3次今天就没机会了
 * 1.先输入手机号
 * 2.给你发个短信  给你的是验证码
 * ==> 将验证码写入到redis中
 * 3.输入验证码
 * 4.告诉你验证成功还是失败
 *
 *
 * //验证手机号
 * 判断字符串是否符合手机号码格式
 * 移动号段:   134 135 136 137 138 139 147 148 150 151 152 157 158 159  165 172 178 182 183 184 187 188 198
 * 联通号段:   130 131 132 145 146 155 156 166 170 171 175 176 185 186
 * 电信号段:   133 149 153 170 173 174 177 180 181 189  191  199
 * 虚拟运营商: 170
 *"[1]"代表下一位为数字可以是几，"[0-9]"代表可以为0-9中的一个，"[5,7,9]"表示可以是5,7,9中的任意一位,[^4]表示除4以外的任何一个,\\d{8}"代表后面是可以是0～9的数字，有8位。
  String regex="^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
 */
public class PhoneDemo {
    public static void main(String[] args) throws InterruptedException {
        JedisPool pool = new JedisPool("linux01", 6379);
        Jedis jedis = pool.getResource();


        System.out.println("在一个夜黑风高的晚上，开启了手机验证！！！");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的手机号:");
        String phoneNum = sc.nextLine();
        //验证手机号是不是正确的？？ 正则判断,qq号,邮箱
        String regex="^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
        boolean matches = phoneNum.matches(regex);
        if (matches){
            //造验证码
            String code = getCode();
            //发送短信
            System.out.println("短信已经发送给你，验证码是:"+code);
            //将验证码写到redis中  key:手机号  value：验证码
            jedis.setex(phoneNum,6,code);

            int count = 1;

            while (count <=3){
                //输入验证码
                String yourCode = sc.next();
                if(yourCode.equals(jedis.get(phoneNum))){
                    System.out.println("登录成功！！！");
                    //成功了就退出去
                    break;
                }else{
                    if (count == 3){
                        System.out.println("3次机会已经用完了，明天请起早！");
                    }else{
                        System.out.println("输入错误，请重新输入:");
                    }
                    count++;
                }
            }
        }else {
            System.out.println("手机号不正确");
        }
    }

    public static String getCode(){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int num = new Random().nextInt(10);
            sb.append(num);
        }
        return sb.toString();
    }


}
